package com.laker.autotest.webui.page.csdn;

import com.laker.autotest.webui.core.BasePage;
import com.microsoft.playwright.FrameLocator;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;
import com.microsoft.playwright.options.AriaRole;

/**
 * <p>
 * https://playwright.dev/java/docs/pom
 * 页面对象模型，目的是为了代码维护方便。
 * 以登录功能为例，登录页面需要存放元素定位和控件操作行为。
 * </p>
 */
public class CsdnLoginPage extends BasePage {
    public static final String URL = "https://www.csdn.net";

    /**
     * 元素定位
     */
    private final Locator loginButton;
    private final Locator passwordLoginButton;
    private final Locator usernameInput;
    private final Locator passwordInput;
    private final Locator disclaimer;
    private final Locator loginSubmit;
    private final Locator errorMessage;

    /**
     * 构造函数初始化元素定位
     *
     * @param page
     */
    public CsdnLoginPage(Page page) {
        super(page);
        loginButton = page.getByText("登录", new Page.GetByTextOptions().setExact(true));
        FrameLocator frameLocator = page.frameLocator("iframe[name=\"passport_iframe\"]");
        passwordLoginButton = frameLocator.getByText("密码登录");
        usernameInput = frameLocator.getByPlaceholder("手机号/邮箱/用户名");
        passwordInput = frameLocator.getByPlaceholder("密码");
        disclaimer = frameLocator.locator("i");
        loginSubmit = frameLocator.getByRole(AriaRole.BUTTON, new FrameLocator.GetByRoleOptions().setName("登录"));
        errorMessage = frameLocator.locator(".login-form-error");
    }

    /**
     * 返回页面URL
     *
     * @return
     */
    @Override
    protected String initUrl() {
        return URL;
    }

    /**
     * 使用给定的用户名和密码执行登录操作。
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果消息
     */
    public String login(String username, String password) {
        // 点击登录按钮
        loginButton.click();
        // 点击密码登录按钮
        passwordLoginButton.click();
        // 输入用户名
        usernameInput.fill(username);
        // 输入密码
        passwordInput.fill(password);
        // 点击声明
        disclaimer.click();
        // 点击登录提交按钮
        loginSubmit.click();
        // 返回错误消息
        return getComponentText(errorMessage);
    }
}